﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//2.下面加起来总共是52，但是输出的字节大小却是56。将char sex；放到float socres[3]上面，可以优化为52；
	//因为结构体需要根据数据类型进行内存对齐；由于内存对齐，导致很多用不了的空余内存就被浪费了，所以才
	//产生了56，这时候就需要优化，尽量不要浪费内存，最后得到52。总的来说，内存对齐就是以结构体里面的
	//最大的变量unsigned int age占的空间4个字节为基准，所以后面的变量都以4个字节为一块内存了。
	// char name[20],占了20个字节，char tel[15]占了4块内存，但又剩了一个字节，char sex刚好补满，就是52个字节了。
	//不然的话，float scores[3]只能浪费掉这一个字节，重新占3块内存，而char sex就1个字节，占了一块内存，
	//这就产生了56个字节。
/*
struct stus
{
	char name[20];//20
	unsigned int age;//4
	char tel[15];//15
	char sex;//1
	float scores[3];//12
	//char sex;//1
}stu;*/
struct stus
{
	/*char* p;//4			//4
	char arr[2];//2		//8
	short d;//2			//8
	int c;//4			//12
	//short d;//2			//16
	long g;//4			//16
	double f;//8		//24
	//long g;//4			//32
	float h[2];//8		//40-->32*/

	//3.下面这样写，虽然可以节省内存空间，但是不便于阅读；
	double f;//8		//8
	float h[2];//8		//16
	char* p;//4			//20
	int c;//4			//24
	long g;//4			//28
	char arr[2];//2		//30
	short d;//2			//32

	/*
	* 姓名：	char name[200];
	* 等级：	int
	* 当前经验：int
	* 攻击：	int
	* 防御：	int
	* 技能冷却：float
	*/
}stu;

//main119：结构体的大小和内存结构
int main119()
{
	printf("1.输出结构体stu的大小：%d\n", sizeof(stu));//56-->52-->40-->32

	system("pause");
	return EXIT_SUCCESS;
}